
/*

	在Express 3中，当触发一个错误，隐式调用errorHandler中间件，在控制台中输出错误，并返回给客户端，
	可以在浏览器中观察到详细的错误信息

*/

/*var express = require('express');
var app = express();
app.get('/', function(req, res){
	noneexists();
	res.send('你好');
});
app.listen(1337, 'localhost');*/

/*
浏览器中显示如下错误信息：
ReferenceError: noneexists is not defined
   at F:\GitCK\xx-fontendTest\test-nodejs\myApp\Express\middleWare\errorHandler.js:12:2
   at callbacks (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\lib\router\index.js:164:37)
   at param (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\lib\router\index.js:138:11)
   at pass (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\lib\router\index.js:145:5)
   at Router._dispatch (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\lib\router\index.js:173:5)
   at Object.router (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\lib\router\index.js:33:10)
   at next (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\node_modules\connect\lib\proto.js:169:15)
   at Object.expressInit [as handle] (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\lib\middleware.js:30:5)
   at next (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\node_modules\connect\lib\proto.js:169:15)
   at Object.query [as handle] (F:\GitCK\xx-fontendTest\test-nodejs\node_modules\express\node_modules\connect\lib\middleware\query.js:43:5)
*/





/*

	但是网站发布后，这种机制用户体验很差，
	我们可以自定义一个错误处理中间件函数，
	在使用自定义错误处理中间件函数之前，必须显示使用router中间件
	如果在自定义错误处理中间件函数中将错误信息返回给客户端，那么控制台不能显示错误堆栈信息
	需要标准流进行输出

*/
/*var express = require('express');
var app = express();

app.use(app.router);
app.use(function(err, req, res, next){
	console.log(err.stack);
	res.send(500, err.message);
});

app.get('/', function(req, res){
	noneexists();
	res.send('你好');
});
app.listen(1337, 'localhost');*/

/*
浏览器中显示如下错误信息：
noneexists is not defined
*/



/*

	在错误处理中间件函数中，next参数值为下一个需要被调用的函数
	效果同上

*/

var express = require('express');
var app = express();

app.use(app.router);
app.use(function(err, req, res, next){
	console.log(err.stack);
	next(err);
});
app.use(function(err, req, res, next){
	res.send(500, err.message);
});

app.get('/', function(req, res){
	noneexists();
	res.send('你好');
});
app.listen(1337, 'localhost');